home *** CD-ROM | disk | FTP | other *** search
/ Libris Britannia 4 / science library(b).zip / science library(b) / DDJMAG / DDJ9203.ZIP / OOPASM.ZIP / CLOCK.ASM < prev    next >
Assembly Source File  |  1990-07-16  |  3KB  |  118 lines

  1.     .MODEL    SMALL
  2.  
  3.     INCLUDE    equates.inc
  4.     INCLUDE    instance.inc
  5.     INCLUDE    messages.inc
  6.     INCLUDE    objects.inc
  7.  
  8. IF1
  9.     INCLUDE    macros.mac
  10.     INCLUDE    objects.mac
  11.     INCLUDE    strings.mac
  12. ENDIF
  13.  
  14.     EXTRN    Buffer:WORD
  15.  
  16.     .CODE
  17.  
  18. COMMENT    %
  19. ==============================================================================
  20. Gets the current system time.
  21.  
  22. Passes:    ah - Hours
  23.     al - Minutes
  24.     dl - Seconds
  25.  
  26. =============================================================================%
  27. getTime    PROC    NEAR
  28.     mov        ah,2Ch            ;Pass get time function code
  29.     int        DosInt            ;MS-DOS interrupt
  30.     mov        ax,cx            ;Pass hours/mins
  31.  
  32.     lea        di,Buffer+BufSize-10    ;Get end of text buffer addr
  33.  
  34.     mov        cx,ax            ;Get hours/mins
  35.     mov        al,ch            ;Get BCD hours
  36.     call        convertDigits        ;Convert hours
  37.     mov        Wptr[di],ax        ;Save ASCII hours
  38.     mov        Bptr[di+2],':'        ;Save colon
  39.  
  40.     mov        al,cl            ;Get BCD minutes
  41.     call        convertDigits        ;Convert minutes
  42.     mov        Wptr[di+3],ax        ;Save ASCII minutes
  43.     mov        Bptr[di+5],':'        ;Save colon
  44.  
  45.     mov        al,dh            ;Get BCD seconds
  46.     call        convertDigits        ;Convert seconds
  47.     mov        Wptr[di+6],ax        ;Save ASCII seconds
  48.     mov        Wptr[di+8],00h        ;Mark end of string
  49.     ret
  50. getTime    ENDP
  51.  
  52.  
  53.  
  54.     PUBLIC    convertDigits
  55. COMMENT    %
  56. ==============================================================================
  57. Converts the current system time into ASCII.
  58.  
  59. Passed:    al - BCD Time component
  60.  
  61. Passes:    ax - ASCII time component
  62.  
  63. =============================================================================%
  64. convertDigits    PROC    NEAR
  65.     push        cx
  66.     xor        ah,ah            ;Zero high reg
  67.     moreThan    al,9,cvd1        ;If > 9 - Divide by 10
  68.     mov        cl,8            ;Else get #bits to shift
  69.     shl        ax,cl            ;Shift left
  70.     jmp        cvd2
  71.  
  72. cvd1:    mov        cl,10d            ;Num to divide by
  73.     div        cl            ;al=quotient, ah=remainder
  74.  
  75. cvd2:    add        al,30h            ;Convert lo-order to ASCII
  76.     add        ah,30h            ;Convert hi-order to ASCII
  77.     pop        cx
  78.     ret
  79. convertDigits    ENDP
  80.  
  81.  
  82.  
  83. COMMENT    %
  84. ==============================================================================
  85. Displays the ASCII representation of the current system time.
  86.  
  87. =============================================================================%
  88. disTime    PROC    NEAR
  89.     getInst        dh,Row1,Clock        ;Get clock display row
  90.     getInst        dl,Col1            ;Get clock display column
  91.     getInst        bl,Color        ;Get color
  92.  
  93.     lea        si,Buffer+BufSize-10    ;Get text addr
  94.     disStrg        dh,dl,bl,si        ;Display time
  95.     ret
  96. disTime    ENDP
  97.  
  98.  
  99.  
  100.     .DATA
  101.  
  102. defMsg    Clock,\
  103.     Refresh,\
  104.     <getTime,,disTime>
  105.  
  106. defObj    Clock,\
  107.     <>,\
  108.     <Row1,1,0,\
  109.     Col1,1,70,\
  110.     Row2,1,Nil,\
  111.     Col2,1,Nil,\
  112.     Color,1,31h>,\
  113.     <Refresh>
  114.  
  115.  
  116.  
  117.     END
  118.